<?php

require_once LIBRARIES_ENTITIES_DATABASE;
require_once LIBRARIES_TOOLS_UTILITY;
require_once LIBRARIES_TOOLS_XTEMPLATE;
require_once LIBRARIES_TOOLS_PAGERFRONTEND;


require_once LIBRARIES_ENTITIES_PROCEDURES;
require_once LIBRARIES_ENTITIES_FIELDS;
require_once LIBRARIES_ENTITIES_UNITS;
require_once LIBRARIES_ENTITIES_UNITTYPES;


class ProcedureComponent {

    public function invoke() {

        $dir = dirname(__FILE__);

        $view = '';
        if (isset($_GET['view'])) {
            $view = $_GET['view'];
        }

        $item = '';
        if (isset($_GET['item'])) {
            $item = $_GET['item'];
        }


        $action = '';
        if (isset($_POST['hdAction'])) {
            $action = $_POST['hdAction'];
        }





        if ($action == 'search') {

            // unit type of procedure
            $unitType = '';
            if (isset($_POST['unitType'])) {
                $unitType = $_POST['unitType'];
            }

            if ($unitType == 'Cấp Huyện') {

                $unitType = $_POST['unitType'];
                $unitID = 0;
                $fieldID = $_POST['fieldID'];

                $procedures = $this->getProcedureListByUnittypeAndFieldIDAndUnitID($unitType, $fieldID, $unitID);

                if (count($procedures) > 0) {
                    for ($i = 0; $i < count($procedures); $i++) {

                        $xtemplate = new XTemplate($dir . '/views/searchResult.html');

                        $xtemplate->assign('PROCEDUR_ID', $procedures[$i]->getID());

                        $xtemplate->assign('PROCEDURE_TITLE', $procedures[$i]->getTitle());
                        $xtemplate->assign('PROCEDURE_ALIAS', $procedures[$i]->getAlias());
                        $xtemplate->assign('PROCEDURE_DATE', Utility::formatDateTimeToView($procedures[$i]->getModifiedDate()));
                        $xtemplate->assign('PROCEDURE_DESCRIPTION', $procedures[$i]->getDescription());

                        $xtemplate->parse('main.procedure');


                        $xtemplate->parse('main');
                        $xtemplate->out('main');
                    }
                }
            } else if ($unitType == 'Cấp Sở Ngành') {

                $unitType = $_POST['unitType'];
                $unitID = $_POST['unitID'];
                $fieldID = $_POST['fieldID'];

                $procedures = $this->getProcedureListByUnittypeAndFieldIDAndUnitID($unitType, $fieldID, $unitID);

                if (count($procedures) > 0) {
                    for ($i = 0; $i < count($procedures); $i++) {

                        $xtemplate = new XTemplate($dir . '/views/searchResult.html');

                        $xtemplate->assign('PROCEDUR_ID', $procedures[$i]->getID());

                        $xtemplate->assign('PROCEDURE_TITLE', $procedures[$i]->getTitle());
                        $xtemplate->assign('PROCEDURE_ALIAS', $procedures[$i]->getAlias());
                        $xtemplate->assign('PROCEDURE_DATE', Utility::formatDateTimeToView($procedures[$i]->getModifiedDate()));
                        $xtemplate->assign('PROCEDURE_DESCRIPTION', $procedures[$i]->getDescription());

                        $xtemplate->parse('main.procedure');


                        $xtemplate->parse('main');
                        $xtemplate->out('main');
                    }
                }
            } else if ($unitType == 'Cấp Xã') {
                $unitType = $_POST['unitType'];
                $unitID = 0;
                $fieldID = $_POST['fieldID'];

                $procedures = $this->getProcedureListByUnittypeAndFieldIDAndUnitID($unitType, $fieldID, $unitID);

                if (count($procedures) > 0) {
                    for ($i = 0; $i < count($procedures); $i++) {

                        $xtemplate = new XTemplate($dir . '/views/searchResult.html');

                        $xtemplate->assign('PROCEDUR_ID', $procedures[$i]->getID());

                        $xtemplate->assign('PROCEDURE_TITLE', $procedures[$i]->getTitle());
                        $xtemplate->assign('PROCEDURE_ALIAS', $procedures[$i]->getAlias());
                        $xtemplate->assign('PROCEDURE_DATE', Utility::formatDateTimeToView($procedures[$i]->getModifiedDate()));
                        $xtemplate->assign('PROCEDURE_DESCRIPTION', $procedures[$i]->getDescription());

                        $xtemplate->parse('main.procedure');


                        $xtemplate->parse('main');
                        $xtemplate->out('main');
                    }
                }
            } else {
                $searchText = $_POST['txtSearchText'];

                $procedures = $this->searchProcedureByText($searchText);
                if (count($procedures) > 0) {
                    for ($i = 0; $i < count($procedures); $i++) {

                        $xtemplate = new XTemplate($dir . '/views/searchResult.html');

                        $xtemplate->assign('PROCEDUR_ID', $procedures[$i]->getID());

                        $xtemplate->assign('PROCEDURE_TITLE', $procedures[$i]->getTitle());
                        $xtemplate->assign('PROCEDURE_ALIAS', $procedures[$i]->getAlias());
                        $xtemplate->assign('PROCEDURE_DATE', Utility::formatDateTimeToView($procedures[$i]->getModifiedDate()));
                        $xtemplate->assign('PROCEDURE_DESCRIPTION', $procedures[$i]->getDescription());

                        $xtemplate->parse('main.procedure');


                        $xtemplate->parse('main');
                        $xtemplate->out('main');
                    }
                }
            }
        } else {


            if ($item == 'department') {

                $xtemplate = new XTemplate($dir . '/views/department.html');

                $unitType = 'Cấp Sở Ngành';
                $fieldID = 0;
                $unitID = 0;
                $procedures = $this->getProcedureListByUnittypeAndFieldIDAndUnitID($unitType, $fieldID, $unitID);

                if (count($procedures) > 0) {
                    for ($i = 0; $i < count($procedures); $i++) {

                        $xtemplate->assign('PROCEDUR_ID', $procedures[$i]->getID());
                        $xtemplate->assign('PROCEDURE_TITLE', $procedures[$i]->getTitle());
                        $xtemplate->assign('PROCEDURE_ALIAS', $procedures[$i]->getAlias());
                        $xtemplate->assign('PROCEDURE_DATE', Utility::formatDateTimeToView($procedures[$i]->getModifiedDate()));
                        $xtemplate->assign('PROCEDURE_DESCRIPTION', $procedures[$i]->getDescription());
                        $xtemplate->parse('main.procedure');
                    }
                }
                $this->printFieldList($xtemplate);
                $this->printUnitList($xtemplate);

                $xtemplate->parse('main');
                $xtemplate->out('main');
            } else if ($item == 'district') {

                $xtemplate = new XTemplate($dir . '/views/district.html');

                $unitType = 'Cấp Huyện';
                $unitID = 0;
                $fieldID = 0;

                $procedures = $this->getProcedureListByUnittypeAndFieldIDAndUnitID($unitType, $fieldID, $unitID);

                if (count($procedures) > 0) {
                    for ($i = 0; $i < count($procedures); $i++) {

                        $xtemplate->assign('PROCEDUR_ID', $procedures[$i]->getID());
                        $xtemplate->assign('PROCEDURE_TITLE', $procedures[$i]->getTitle());
                        $xtemplate->assign('PROCEDURE_ALIAS', $procedures[$i]->getAlias());
                        $xtemplate->assign('PROCEDURE_DATE', Utility::formatDateTimeToView($procedures[$i]->getModifiedDate()));
                        $xtemplate->assign('PROCEDURE_DESCRIPTION', $procedures[$i]->getDescription());
                        $xtemplate->parse('main.procedure');
                    }
                }

                $this->printFieldList($xtemplate);
                $xtemplate->parse('main');
                $xtemplate->out('main');
            } else if ($item == 'ward') {

                $xtemplate = new XTemplate($dir . '/views/ward.html');

                $unitType = 'Cấp Xã';
                $unitID = 0;
                $fieldID = 0;

                $procedures = $this->getProcedureListByUnittypeAndFieldIDAndUnitID($unitType, $fieldID, $unitID);

                if (count($procedures) > 0) {
                    for ($i = 0; $i < count($procedures); $i++) {

                        $xtemplate->assign('PROCEDUR_ID', $procedures[$i]->getID());
                        $xtemplate->assign('PROCEDURE_TITLE', $procedures[$i]->getTitle());
                        $xtemplate->assign('PROCEDURE_ALIAS', $procedures[$i]->getAlias());
                        $xtemplate->assign('PROCEDURE_DATE', Utility::formatDateTimeToView($procedures[$i]->getModifiedDate()));
                        $xtemplate->assign('PROCEDURE_DESCRIPTION', $procedures[$i]->getDescription());
                        $xtemplate->parse('main.procedure');
                    }
                }

                $this->printFieldList($xtemplate);
                $xtemplate->parse('main');
                $xtemplate->out('main');
            } else {
                $xtemplate = new XTemplate($dir . '/views/index.html');

                $xtemplate->parse('main');
                $xtemplate->out('main');
            }
        }
    }

    // search procedure by text
    private function searchProcedureByText($searchText) {
        $db = new Database();
        try {
            $procedure = new Procedures();
            $procedure->setTitle($searchText);
            $result = $procedure->searchByTitle($db);
            $db->submitChanges();
            return $result;
        } catch (PDOException $exc) {
            echo $exc->getMessage();
            $db->submitChanges();
            exit();
        }
    }

    private function getUnitList() {
        $db = new Database();
        try {
            $unit = new Units();
            $result = $unit->getList($db);
            $db->submitChanges($db);
            return $result;
        } catch (PDOException $exc) {
            echo $exc->getMessage();
            exit();
        }
    }

    private function getUnitTypeList() {
        $db = new Database();
        try {
            $unitType = new UnitTypes();
            $result = $unitType->getList($db);
            $db->submitChanges($db);
            return $result;
        } catch (PDOException $exc) {
            echo $exc->getMessage();
            exit();
        }
    }

    
    private function getProcedureListByUnittypeAndFieldIDAndUnitID($unitType, $fieldID, $unitID) {
        $db = new Database();
        try {
            $procedure = new Procedures();

            $procedure->setUnitTypeName($unitType);
            $procedure->setFieldID($fieldID);
            $procedure->setUnitID($unitID);

            $result = $procedure->getList($db);

            $db->submitChanges($db);
            return $result;
        } catch (PDOException $exc) {
            echo $exc->getMessage();
            exit();
        }
    }

    private function getFieldList() {
        $db = new Database();
        try {
            $field = new Fields();
            $result = $field->getList($db);
            $db->submitChanges($db);
            return $result;
        } catch (PDOException $exc) {
            echo $exc->getMessage();
        }
    }

    // in ra danh sách category
    private function printFieldList($xtemplate, $parentID = null) {

        // tải danh sách nhóm tin
        $fields = $this->getFieldList();

        // in ra danh sách chủ đề bài viết
        foreach ($fields as $field) {


            $xtemplate->assign('FIELD_ID', $field->getID());
            $xtemplate->assign('FIELD_NAME', $field->getName());

            if ($parentID != null) {
                if ($parentID == $field->getID()) {
                    $xtemplate->assign('SELECTED_FIELD', 'selected');
                } else {
                    $xtemplate->assign('SELECTED_FIELD', '');
                }
            } else {
                if (isset($_POST['slField'])) {
                    // nếu có biến post categoryID 
                    // (tức là có chọn thì hiển thị lại cái đã chọn trong danh sách)
                    if ($_POST['slField'] == $field->getID()) {
                        $xtemplate->assign('SELECTED_FIELD', 'selected');
                    } else {
                        $xtemplate->assign('SELECTED_FIELD', '');
                    }
                } else if (isset($_GET['fieldID'])) {
                    // nếu có biến get categoryID 
                    // (tức là từ form thêm hay form edit trả về)
                    if ($_GET['fieldID'] == $field->getID()) {
                        $xtemplate->assign('SELECTED_FIELD', 'selected');
                    } else {
                        $xtemplate->assign('SELECTED_FIELD', '');
                    }
                } else {
                    $xtemplate->assign('SELECTED_FIELD', '');
                }
            }

            $xtemplate->parse('main.field_list');
        }
    }

    private function printUnitList($xtemplate, $parentID = null) {

        // tải danh sách nhóm tin
        $units = $this->getUnitList();

        if (count($units) > 0) {

            foreach ($units as $unit) {

                $xtemplate->assign('UNIT_ID', $unit->getID());
                $xtemplate->assign('UNIT_NAME', $unit->getName());

                if ($parentID != null) {
                    // nếu có biến get categoryID 
                    // (tức là từ form thêm hay form edit trả về)
                    if ($parentID == $unit->getID()) {
                        $xtemplate->assign('SELECTED_UNIT', 'selected');
                    } else {
                        $xtemplate->assign('SELECTED_UNIT', '');
                    }
                } else {
                    if (isset($_POST['slUnit'])) {
                        // nếu có biến post categoryID 
                        // (tức là có chọn thì hiển thị lại cái đã chọn trong danh sách)
                        if ($_POST['slUnit'] == $unit->getID()) {
                            $xtemplate->assign('SELECTED_UNIT', 'selected');
                        } else {
                            $xtemplate->assign('SELECTED_UNIT', '');
                        }
                    } else if (isset($_GET['unitID'])) {
                        // nếu có biến get categoryID 
                        // (tức là từ form thêm hay form edit trả về)
                        if ($_GET['unitID'] == $unit->getID()) {
                            $xtemplate->assign('SELECTED_UNIT', 'selected');
                        } else {
                            $xtemplate->assign('SELECTED_UNIT', '');
                        }
                    } else {
                        $xtemplate->assign('SELECTED_UNIT', '');
                    }
                }

                $xtemplate->parse('main.unit_list');
            }
        }
    }

    private function printUnitTypeList($xtemplate, $parentID = null) {


        $unitTypes = $this->getUnitTypeList();

        if (count($unitTypes) > 0) {

            foreach ($unitTypes as $unitType) {

                $xtemplate->assign('UNITTYPE', $unitType->getName());

                if ($parentID != null) {
                    // nếu có biến get categoryID 
                    // (tức là từ form thêm hay form edit trả về)
                    if ($parentID == $unitType->getName()) {
                        $xtemplate->assign('SELECTED_UNITTYPE', 'selected');
                    } else {
                        $xtemplate->assign('SELECTED_UNITTYPE', '');
                    }
                } else {
                    if (isset($_POST['slUnitType'])) {
                        // nếu có biến post categoryID 
                        // (tức là có chọn thì hiển thị lại cái đã chọn trong danh sách)
                        if ($_POST['slUnitType'] == $unitType->getName()) {
                            $xtemplate->assign('SELECTED_UNITTYPE', 'selected');
                        } else {
                            $xtemplate->assign('SELECTED_UNITTYPE', '');
                        }
                    } else if (isset($_GET['unitType'])) {
                        // nếu có biến get categoryID 
                        // (tức là từ form thêm hay form edit trả về)
                        if ($_GET['unitType'] == $unitType->getName()) {
                            $xtemplate->assign('SELECTED_UNITTYPE', 'selected');
                        } else {
                            $xtemplate->assign('SELECTED_UNITTYPE', '');
                        }
                    } else {
                        $xtemplate->assign('SELECTED_UNITTYPE', '');
                    }
                }

                $xtemplate->parse('main.unitType_list');
            }
        }
    }

}

?>
